from scrapy_redis.spiders import RedisSpider
from scrapy_splash import SplashRequest


# scrapy_redis分布式爬虫在业务逻辑结束后并不能够自动退出
# 重写的dupefilter去重类可以自定义位置，也须在配置文件中写入相应的路径
class SplashAndRedisSpider(RedisSpider):
    name = 'splash_and_redis'
    allowed_domains = ['baidu.com']

    # start_urls = ['https://www.baidu.com/s?wd=python']
    redis_key = 'splash_and_redis'

    # lpush splash_and_redis 'https://www.baidu.com'

    # 分布式的起始的url不能使用splash服务!
    # 需要重写dupefilter去重类!

    def parse(self, response):
        yield SplashRequest('https://www.baidu.com/s?wd=python',
                            callback=self.parse_splash,
                            args={'wait': 10},  # 最大超时时间，单位：秒
                            endpoint='render.html')  # 使用splash服务的固定参数

    def parse_splash(self, response):
        with open('splash_and_redis.html', 'w') as f:
            f.write(response.body.decode())
